package com.excilys.formation.project.repository;

import java.util.SortedSet;

import javax.validation.constraints.Min;

import org.joda.time.Interval;

import com.excilys.formation.project.entities.Transaction;

/**
 * 
 * @author excilys
 * 
 */
public interface TransactionDAO {
	/**
	 * Persiste une nouvelle transaction ou les changements d'une existante.
	 * 
	 * @param transaction
	 *            la transaction à persister.
	 */
	void save(Transaction transaction);

	/**
	 * Renvoie les virements émis par client donné dans un interval de temps.
	 * 
	 * @param clientId
	 *            L'id du client dont il faut récupérer les virements
	 * @param interval
	 *            Interval de dates pour récupérer les virements
	 * @param offset
	 *            numéro du premier résultat à récupérer
	 * @param limit
	 *            nombre de résultat à récupérer
	 * @return les virements d'un client donné.
	 */
	SortedSet<Transaction> getVirementsEmisByClientByTimeInterval(long clientId, Interval interval, @Min(0) int offset, @Min(0) int limit);

	/**
	 * Renvoie le nombre de virements émis par client donné dans un interval de temps.
	 * 
	 * @param clientId
	 *            L'id du client dont il faut récupérer les virements
	 * @param interval
	 *            Interval de dates pour récupérer les virements
	 * @return le nombre de virements émis
	 */
	long getCountVirementsClientByTimeInterval(long clientId, Interval interval);
}
